package senhas;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;

import javax.swing.JProgressBar;



public class ArquivoDeSenhas extends Thread {
	private File f;
	private JProgressBar progressBar;
	private GeradorDeSenhas geradorDeSenhas = null; 

	public ArrayList<QuebradorDeSenhas> threads;
	
	private BufferedReader br;
	private int linhasLidas;
	
	public void run(GeradorDeSenhas geradorDeSenhas) {
		setGeradorDeSenhas(geradorDeSenhas);
		geradorDeSenhas.run();
	}
	
	public ArquivoDeSenhas(File arq) {
		f = arq;
		linhasLidas = 0;
		
		FileReader fr;
		int numLinhas=0;
		
		try {
			fr = new FileReader(f);
			br = new BufferedReader(fr);
			
			LineNumberReader lineRead = new LineNumberReader(new InputStreamReader(new DataInputStream(new FileInputStream(f)))); 
			lineRead.skip(f.length());  
			numLinhas = lineRead.getLineNumber() + 1; 
			
			System.out.println("O ARQUIVO CONTEM " + numLinhas + " LINHAS!!!!!!!"); 
			
			progressBar = new JProgressBar(0, numLinhas);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}  

		threads = new ArrayList<QuebradorDeSenhas>();
	}
	
	public String getNovaSenhaCript() {
		String linha = null;
		
		try {
			linha = br.readLine();
			
			if (linha != null) {
				linhasLidas++;
				System.out.printf("%s\n", linha);
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		atualizarProgressBar();
		
		return linha;
	}
	
	public GeradorDeSenhas getGeradorDeSenhas() {
		return geradorDeSenhas;
	}
	public void setGeradorDeSenhas(GeradorDeSenhas geradorDeSenhas) {
		this.geradorDeSenhas = geradorDeSenhas;
	}
	
	public void atualizarProgressBar() {
		progressBar.setValue(linhasLidas);
	}
}
